gboolean opt_gpg_verify_set = FALSE;
gboolean opt_gpg_verify_summary_set = FALSE;
const char *url_override = NULL;
- gboolean mirroring_into_archive;
gboolean inherit_transaction = FALSE;
int i;
g_return_val_if_fail (dirs_to_pull[i][0] == '/', FALSE);
g_return_val_if_fail (!(disable_static_deltas && pull_data->require_static_deltas), FALSE);
+
/* We only do dry runs with static deltas, because we don't really have any
* in-advance information for bare fetches.
*/
pull_data->is_untrusted = (flags & OSTREE_REPO_PULL_FLAGS_UNTRUSTED) > 0;
pull_data->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
- mirroring_into_archive = pull_data->is_mirror && self->mode == OSTREE_REPO_MODE_ARCHIVE_Z2;
-
if (error)
pull_data->async_error = &pull_data->cached_async_error;
else
if (pull_data->remote_repo_local && !pull_data->require_static_deltas)
disable_static_deltas = TRUE;
+ /* We can't use static deltas if pulling into an archive-z2 repo. */
+ if (self->mode == OSTREE_REPO_MODE_ARCHIVE_Z2)
+ {
+ if (pull_data->require_static_deltas)
+ {
+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Can't use static deltas in an archive repo");
+ goto out;
+ }
+ disable_static_deltas = TRUE;
+ }
+
+ /* It's not efficient to use static deltas if all we want is the commit
+ * metadata. */
+ if (pull_data->is_commit_only)
+ disable_static_deltas = TRUE;
+
pull_data->static_delta_superblocks = g_ptr_array_new_with_free_func ((GDestroyNotify)g_variant_unref);
{
&from_revision, error))
goto out;
- if (!(disable_static_deltas || mirroring_into_archive || pull_data->is_commit_only) &&
+ if (!disable_static_deltas &&
(from_revision == NULL || g_strcmp0 (from_revision, to_revision) != 0))
{
g_autofree char *delta_name =
assert_file_has_content baz/cow '^moo$'
}
-echo "1..14"
+echo "1..15"
# Try both syntaxes
repo_init
${CMD_PREFIX} ostree --repo=mirrorrepo fsck
echo "ok pull mirror (should not apply deltas)"
+cd ${test_tmpdir}
+if ${CMD_PREFIX} ostree --repo=mirrorrepo \
+ pull origin main --require-static-deltas 2>err.txt; then
+ assert_not_reached "--require-static-deltas unexpectedly succeeded"
+fi
+assert_file_has_content err.txt "Can't use static deltas in an archive repo"
+${CMD_PREFIX} ostree --repo=mirrorrepo pull origin main
+${CMD_PREFIX} ostree --repo=mirrorrepo fsck
+echo "ok pull (refuses deltas)"
+
cd ${test_tmpdir}
rm mirrorrepo/refs/remotes/* -rf
${CMD_PREFIX} ostree --repo=mirrorrepo prune --refs-only
${CMD_PREFIX} ostree --repo=repo summary -u
-mkdir repo2 && ${CMD_PREFIX} ostree --repo=repo2 init --mode=archive-z2
+mkdir repo2 && ${CMD_PREFIX} ostree --repo=repo2 init --mode=bare-user
${CMD_PREFIX} ostree --repo=repo2 pull-local --require-static-deltas repo ${newrev}
${CMD_PREFIX} ostree --repo=repo2 fsck
${CMD_PREFIX} ostree --repo=repo2 ls ${newrev} >/dev/null
${CMD_PREFIX} ostree --repo=repo summary -u
rm -rf repo2
-mkdir repo2 && ${CMD_PREFIX} ostree --repo=repo2 init --mode=archive-z2
+mkdir repo2 && ${CMD_PREFIX} ostree --repo=repo2 init --mode=bare-user
${CMD_PREFIX} ostree --repo=repo2 pull-local repo ${newrev}
${CMD_PREFIX} ostree --repo=repo2 pull-local --require-static-deltas repo ${samerev}
${CMD_PREFIX} ostree --repo=repo2 fsck